package com.by.controller;

import com.by.common.core.bean.ResultBean;
import com.by.common.core.response.R;
import com.by.service.MinioService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;

@RestController
@RequestMapping("/minio")
public class MinioController {


    @Autowired
    MinioService minioService;


    @PostMapping(value = "/update",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public ResultBean upload(@RequestPart("file") MultipartFile file ){
        String url = minioService.upload(file);
        return R.success("文件上传成功",url);
    }


    @GetMapping("/download")
    public void downloadFile(
            @RequestParam("objectName") String objectName,
            HttpServletResponse response
    ) {
        // 调用Service层的下载方法，直接操作响应流
        minioService.download(objectName, response);
    }

    /**
     * 预览接口（不带有效期参数，调用 preview(String objectName)）
     * 当前端不传递 expires 时，使用默认有效期（1小时）
     * 注意：此接口与上面的接口路径相同，但参数不同，通过 @RequestParam 的 required 属性区分
     */
    @GetMapping("/preview")
    public ResultBean previewDefault(
            @RequestParam("objectName") String objectName
    ) {
        String previewUrl = minioService.preview(objectName); // 调用无参重载方法
        return R.success("默认有效期的预览链接生成成功", previewUrl);
    }
}
